﻿#define _CRT_SECURE_NO_WARNINGS
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
//int main()
//{
//	/*int ret = islower('a');*/
//	int ret = isspace('a');
//	printf("%d\n", ret);
//	return 0;
//}
//int main()
//{
//	char arr[] = "I am a student";
//	int i = 0;
//	while (arr[i] != '\0')
//	{
//		/*if(arr[i]>='a'&&arr[i]<='z')*/
//		if (islower(arr[i]))
//		{
//			/*arr[i] -= 32;*/
//			arr[i] = toupper(arr[i]); 
//		}
//		i++;
//	}
//	printf("%s\n", arr);
//	return 0;
//}
// 通过计数器的方法实现字符串的长度计算
//int my_strlen(const char* str)
//{
//	int count = 0;
//	assert(str);
//	while (*str)
//	{
//		count;
//		str++;
//	}
//	return count;
//}
//不能创建临时变量计时器
//采用了递归的形式
//int my_strlen(const char* str)
//{
//	assert(str);
//	if (*str == '\0')
//		return 0;
//	else
//		return 1 + my_strlen(str + 1);
//}
//采用了指针-指针的方法计算长度
//int my_strlen(char* s)
//{
//	assert(s);
//	char* p = s;
//	while (*p != '\0')
//		p++;
//	return p - s;
//}
//int main()
//{
//	//返回类型为size_t(无符号),结果一定是大于0的
//	//可以进行强制类型转化(int)
//	if (my_strlen("abc") - my_strlen("abcdef")> 0 )
//	{
//		printf(">\n");
//	}
//	else
//	{
//		printf("<=\n");
//	}
//	return 0;
//}
//char* my_strcpy(char* dest,char* str )
//{
//	assert(dest != NULL);
//	assert(str != NULL);
//	char* ret = dest;
//	//while (*str != '\0')
//	//{
//	//	*dest = *str;//拷贝‘\0’之前的内容
//	//	dest++;
//	//	str++;
//	//}
//	//*dest = *str;//拷贝'\0'
//	while (*dest++ = *str++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[] = "hello bit";
//	char arr2[20] = { 0 };
//	my_strcpy(arr2, arr1);
//	//会将源字符串中的 '\0' 拷⻉到⽬标空间
//	printf("%s\n", arr2);
//	return 0;
//char* my_strcat(char* dest,const char* str)
//{
//	assert(dest && str);
//	char* ret = dest;
//	while (*dest != '\0')
//		dest++;
//	while (*dest++ = *str++)
//		;
//	return ret;
//}
//int main()
//{
//	char arr1[20] = "hello ";
//	char arr2[] = "world";
//	my_strcat(arr1, arr2);//尽量不是自己和自己追加
//	printf("%s\n", arr1);
//
//	return 0;
//}
//int my_strcmp( const char* str1, const char* str2)
//{
//	assert(str1&&str2)
//	while (*str1 == *str2)
//	{
//		if(*str1=='\0')
//			return 0;
//		str1++;
//		str2++;
//	}
//	/*if (*str1 > *str2)
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}*/
//	return *str1 - *str2;
//}
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "abq"; 
//	//比较两个字符串的大小，用strcmp
//	int ret = my_strcmp(arr1, arr2);
//	printf("%d\n",ret); 
//	return 0;
//}
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[20] = { 0 };
//	strncpy(arr2, arr1, 4);
//	printf("%s\n",arr2);
//	return 0;
//} 
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "abqdefghi";
//	int ret = strncmp(arr1, arr2, 5);
//	printf("%d\n", ret);
//	return 0;
//}
//int main()
//{
//	const char arr1[] = "this is an apple\n";
//	const char* p = "is";
//	char* ret = strstr(arr1, p); 
//	if (ret != NULL)
//	{
//		printf("%s\n", ret);
//
//	}
//	else
//	{
//		printf("找不到\n");
//	}
//	return 0;
//}
//简单的算法--暴力查找
//KMP算法--在字符串中找字符串--更加高效，实现和理解也更加复杂
//可以查找下，写一份博客
//my_strstr(const char* str1,const char* str2)
//{
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	const char* cur = str1;
//	if (*str2 == '\0')
//		return (char*)str1;
//	while (*cur)
//	{
//		s1 = cur;
//		s2 = str2;
//		while (*s1!='\0'&&*s2!='\0'&& * s1 == *s2)
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//		{
//			return cur;
//		}
//		cur++;
//	}
//	return NULL;
//}
//int main()
//{
//	char arr1[] = "abcdefabcdef";
//	char arr2[] = "cdef";
//	char* ret =my_strstr(arr1, arr2);
//	assert(ret != NULL);
//	printf("%s\n", ret);
//	return 0;
//}
//int main()
//{
//	char arr[] = "flj3557575341@qq.com";
//	const char* sep = "@.";
//	char* ret = NULL;
//	for (ret = strtok(arr, sep); ret != NULL; ret = strtok(NULL, sep))
//	{
//		printf("%s\n", ret);
//	}
//	/*ret= strtok(arr, sep);
//	printf("%s\n", ret);
//
//	ret = strtok(NULL, sep);
//	printf("%s\n", ret);
//
//	ret = strtok(NULL, sep);
//	printf("%s\n", ret);*/
//	return 0;
//}
//#include <errno.h>
//int main()
//{
//	//fopen以读的形式打开文件的时候，如果文件不存在，就打开失败
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		printf("%s\n", strerror(errno));
//		return 1;
//	}
//	//读文件
//	//关闭文件
//	fclose(pf);
//	return 0;
//}
//int my_strlen(char* dest)
//{
//	int count = 0;
//	while (*dest != '\0')
//	{
//		assert(dest);
//		dest++;
//		count++;
//	}
//	return count;
//}
int my_strlen(const char* dest)
{
	if (*dest == '\0')
	{
		return 0;
	}
	return 1 + my_strlen(dest++);
}
int main()
{
	char arr1[] = "abcdefghi";
	int ret = my_strlen(arr1);
	printf("%d\n", ret);
	return 0;
}
